package main

import "fmt"

type Person struct {
	name string
	age  int
}

type Runner interface {
	run() //只有声明，没有实现，具体实现看具体的类型

}

type Jumper interface {
	jump()
}

type Sporter interface {
	Runner // 嵌套
	Jumper
}

func (*Person) run() {
	fmt.Println("Run~~~~~")
}

func (*Person) jump() {
	fmt.Println("Jump~~~~~")
}

func main() {
	a := new(Person) // Person实现该接口，因为它实现了该接口所有方法
	a.run()
	a.jump()
	// var x interface{} // nil
	var x any
	x = 123
	fmt.Printf("%T %[1]v\n", x)

	x = "abc"
	fmt.Printf("%T %[1]v\n", x)

	x = []int{1, 3, 4}
	fmt.Printf("%T %[1]v\n", x)

	x = [3]int{1, 2}
	fmt.Printf("%T %[1]v\n", x)

	// 切片，元素可能需要的是多重类型
	// []any []interface{}

	z := []interface{} /*之前是类型，之后花括号是字面量需要的*/ {
		1, 100, 1.2, "abc", []int{1, 2}, [2]int{},
		map[int]string{},
	}
	fmt.Println(z, len(z))

}
